//package zero.tech.games.pdk.util;
//
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.Collections;
//import java.util.Comparator;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import zero.tech.games.pdk.data.entity.Card;
///**
// * 无用了
// * @author ASUS
// *
// */
//public class CardsTypeFinderType {
//	/** 查找指定牌型 */
//	public static List<List<Card>> findTypeCards(Collection<Card> fromCards, int cardstype) {
//		List<List<Card>> list = new ArrayList<>();
//		List<GroupCard> groups = groupByCardNum(fromCards);
//		switch (cardstype) {
//		case CardsType.DAN: {
//			// 判断牌里面所有的单张
//			for (GroupCard group : groups) {
//				if (group.getCount() == 1 && group.cardNum <= 15) {
//					// 单张
//					List<Card> tmp1 = new ArrayList<>();
//					tmp1.addAll(group.getList());
//					list.add(tmp1);
//				}
//			}
//		}
//			break;
//		case CardsType.DUI: {
//			// 判断牌里面所有的对子
//			List<List<Card>> tmp1 = new ArrayList<>();
//			for (GroupCard group : groups) {
//				if (group.getCount() == 2) {
//					// 对子
//					List<Card> tt = new ArrayList<>();
//					for (Card card : fromCards) {
//						if (card.getCardNum() == group.getCardNum()) {
//							tt.add(card);
//						}
//					}
//					tmp1.add(tt);
//				}
//			}
//			list.addAll(tmp1);
//		}
//			break;
//		case CardsType.SAN: {
//			// 判断牌里面所有的三张
//			for (GroupCard group : groups) {
//				if (group.getCount() == 3) {
//					List<Card> tmp = new ArrayList<>();
//					tmp.addAll(group.getList());
//					list.add(tmp);
//				}
//			}
//		}
//			break;
//			
//			
//		case CardsType.ZHA_DAN: {
//			// 判断牌里面所有的炸弹
//			for (GroupCard group : groups) {
//				if (group.getCount() == 4) {
//					// 该牌型为4个一样的炸弹
//					List<Card> tmp = new ArrayList<>();
//					tmp.addAll(group.getList());
//					if (!tmp.isEmpty()) {
//						list.add(tmp);
//					}
//				}
//			}
//		}
//			break;
//
//		case CardsType.SHUN: {
//			// 判断牌里面所有的顺子(区分花色顺子比较麻烦)
//			List<Card> tmp = new ArrayList<>();
//			tmp.addAll(fromCards);
//			Collections.sort(tmp, new Comparator<Card>() {
//
//				@Override
//				public int compare(Card o1, Card o2) {
//					int num1=o1.getCardNum()==2?15:o1.getCardNum();
//					int num2=o2.getCardNum()==2?15:o2.getCardNum();
//					return num1 - num2;// 按点数正序排序
//				}
//			});
//			// 开始去重
//			List<Integer> uniques = new ArrayList<>();
//			List<Card> uniqueCards = new ArrayList<>();
//			for (int i = 0; i < tmp.size(); i++) {
//				if (!uniques.contains(tmp.get(i).getCardNum()) && tmp.get(i).getCardNum() >= 3 && tmp.get(i).getCardNum() <= 14) {
//					uniques.add(tmp.get(i).getCardNum());
//					uniqueCards.add(tmp.get(i));
//				}
//			}
//			for (int i = 0; i < uniqueCards.size(); i++) {
//				List<Card> out = new ArrayList<>();
//				Card card0 = uniqueCards.get(i);
//				out.add(card0);
//				for (int j = i + 1; j < uniqueCards.size(); j++) {
//					Card card1 = uniqueCards.get(j);
//					if (card1.getCardNum() - card0.getCardNum() == j - i) {
//						out.add(card1);
//						if (out.size() >= 5) {
//							if (!list.contains(out)) {
//								List<Card> tt = new ArrayList<>();
//								tt.addAll(out);
//								list.add(tt);
//							}
//						}
//					} else {
//						out.clear();
//						break;
//					}
//				}
//			}
//		}
//			break;
//		case CardsType.LIAN_DUI: {
//			// 判断牌里面所有的连对(区分花色顺子比较麻烦)
//			List<Card> cards = new ArrayList<>();
//			for (GroupCard group : groups) {
//				if (group.count == 2) {
//					cards.addAll(group.getList());
//				}
//			}
//			List<Card> tmp = new ArrayList<>();
//			tmp.addAll(cards);
//			Collections.sort(tmp, new Comparator<Card>() {
//
//				@Override
//				public int compare(Card o1, Card o2) {
//					int num1=o1.getCardNum()==2?15:o1.getCardNum();
//					int num2=o2.getCardNum()==2?15:o2.getCardNum();
//					return num1 - num2;
//				}
//			});
//			// 开始去重
//			List<Integer> uniques = new ArrayList<>();
//			List<Card> uniqueCards = new ArrayList<>();
//			for (int i = 0; i < tmp.size(); i++) {
//				if (!uniques.contains(tmp.get(i).getCardNum()) && tmp.get(i).getCardNum() >= 3 && tmp.get(i).getCardNum() <= 14) {
//					uniques.add(tmp.get(i).getCardNum());
//					uniqueCards.add(tmp.get(i));
//				}
//			}
//			for (int i = 0; i < uniqueCards.size(); i++) {
//				List<Card> out = new ArrayList<>();
//				Card card0 = uniqueCards.get(i);
//				out.add(card0);
//				for (int j = i + 1; j < uniqueCards.size(); j++) {
//					Card card1 = uniqueCards.get(j);
//					if (card1.getCardNum() - card0.getCardNum() == j - i) {
//						out.add(card1);
//						if (out.size() >= 2) {
//							if (!list.contains(out)) {
//								List<Card> tt = new ArrayList<>();
//								for (Card card : out) {
//									int num = card.getCardNum();
//									// 拿两张
//									int count = 0;
//									for (Card card2 : fromCards) {
//										if (card2.getCardNum() == num) {
//											tt.add(card2);
//											count++;
//											if (count >= 2) {
//												break;
//											}
//										}
//									}
//								}
//								list.add(tt);
//							}
//						}
//					} else {
//						out.clear();
//						break;
//					}
//				}
//			}
//			// 开始替换重复不同花色的集合
//		}
//			break;
//
//		case CardsType.FEI_JI: {
//			// 判断牌里面所有的飞机
//			List<GroupCard> groupList = new ArrayList<>();
//			for (GroupCard groupCard : groups) {
//				if (groupCard.count == 3 && groupCard.getCardNum() >= 3 && groupCard.getCardNum() <= 14) {
//					groupList.add(groupCard);
//				}
//			}
//			Collections.sort(groupList, new Comparator<GroupCard>() {
//
//				@Override
//				public int compare(GroupCard o1, GroupCard o2) {
//					int num1=o1.getCardNum()==2?15:o1.getCardNum();
//					int num2=o2.getCardNum()==2?15:o2.getCardNum();
//					return num1 - num2;
//				}
//			});
//			List<List<GroupCard>> ttt = new ArrayList<>();
//			// 2.再判断飞机是否存在
//			for (int i = 0; i < groupList.size() - 1; i++) {
//				List<GroupCard> out = new ArrayList<>();
//				GroupCard group0 = groupList.get(i);
//				out.add(group0);
//				for (int j = i + 1; j < groupList.size(); j++) {
//					GroupCard group1 = groupList.get(j);
//					if (group1.getCardNum() - group0.getCardNum() == j - i) {
//						// 可以构成飞机
//						out.add(group1);
//						if (out.size() >= 2) {
//							if (!ttt.contains(out)) {
//								List<GroupCard> tt = new ArrayList<>();
//								tt.addAll(out);
//								ttt.add(tt);
//							}
//						}
//					} else {
//						out.clear();
//						break;
//					}
//				}
//			}
//			for (List<GroupCard> t : ttt) {
//				List<Card> cards = new ArrayList<>();
//				for (GroupCard group : t) {
//					cards.addAll(group.getList());
//				}
//				list.add(cards);
//			}
//		}
//			break;
//		default:
//			break;
//		}
//		return list;
//	}
//
//	public static List<GroupCard> groupByCardNum(Collection<Card> fromCards) {
//		Map<Integer, GroupCard> map = new HashMap<>();
//		for (Card card : fromCards) {
//			if (!map.containsKey(card.getCardNum())) {
//				GroupCard group = new GroupCard(card.getCardNum(), 1);
//				group.getList().add(card);
//				map.put(card.getCardNum(), group);
//
//			} else {
//				GroupCard groupCard = map.get(card.getCardNum());
//				groupCard.getList().add(card);
//				groupCard.setCount(groupCard.getCount() + 1);
//			}
//		}
//		Collection<GroupCard> groupsColletion = map.values();
//		List<GroupCard> list = new ArrayList<>();
//		list.addAll(groupsColletion);
//		Collections.sort(list, new Comparator<GroupCard>() {
//			@Override
//			public int compare(GroupCard o1, GroupCard o2) {
//				int num = o1.getCount() - o2.getCount();
//				if (num == 0) {
//					int num1=o1.getCardNum()==2?15:o1.getCardNum();
//					int num2=o2.getCardNum()==2?15:o2.getCardNum();
//					num = num1- num2;
//				}
//				return num;
//			}
//		});
//		return list;
//	}
//
//	public static class GroupCard {
//		private int cardNum;
//		private int count;
//		private final List<Card> list = new ArrayList<>();
//
//		public GroupCard() {
//			super();
//		}
//
//		public GroupCard(int cardNum, int count) {
//			super();
//			this.cardNum = cardNum;
//			this.count = count;
//		}
//
//		public int getCardNum() {
//			return this.cardNum;
//		}
//
//		public void setCardNum(int cardNum) {
//			this.cardNum = cardNum;
//		}
//
//		public List<Card> getList() {
//			return this.list;
//		}
//
//		public int getCount() {
//			return this.count;
//		}
//
//		public void setCount(int count) {
//			this.count = count;
//		}
//	}
//}
